package cn.openea.perpartner.meily.web.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * @author ysk
 * @email zane_ysk@qq.com
 * @date 2023-03-27 11:37:04
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
@TableName("meily_provide_samples")
public class ProvideSamples implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     *
     */
    @TableId
    private String id;
    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private String createTime;
    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateTime;

    /**
     * 发起人编号
     */
    @NotBlank
    private String initiatorId;

    /**
     * 发起人昵称
     */
    @NotBlank
    private String initiatorName;
    /**
     * 标题
     */
    @NotBlank
    private String subject;

    /**
     * 工单号
     */
    private String taskNumber;
    /**
     * 样品价格（元）
     */
    @NotNull
    private BigDecimal samplePrice;
    /**
     * 样品总数（个）
     */
    @NotNull
    @Min(0)
    private Integer sampleQuota = 0;
    /**
     * 报名截止时间
     */
    @NotBlank
    private String joinEndTime;
    /**
     * 样品发放客服
     */
    @NotBlank
    private String customerServiceId;
    /**
     * 限制报名周期(天)。默认0
     */
    private Integer joinLimitDays = 0;
    /**
     * 活动面向群体。0:测评师；1:区域服务商
     */
    @NotBlank
    private String eventParticipants;
    /**
     * 等级要求。(A级/B级+/C级+/D级+/E级+/F级+)
     */
    private String restrictionLevel;
    /**
     * 活动结束时间（等于报名截止时间）
     */
    @NotBlank
    private String endTime;
    /**
     * 定制ID
     */
    @NotBlank
    private String sceneAssetsId;
    /**
     * 场景ID
     */
    @NotBlank
    private String sceneId;
    /**
     * 参与人数
     */
    private Integer joinNum = 0;
    /**
     * 剩余样品数量
     */
    @NotNull
    @Min(0)
    private Integer remainQuota;
    /**
     * 读者域
     */
    private String allReaders;
    /**
     * 领取记录id
     */
    private String allSubId;
    /**
     * 任务状态。0:正常结束(到期自动结束)；1:正在进行中；2:报名结束；3:活动作废(手动结束)
     */
    @NotBlank
    private String status = "1";
    /**
     * 实际结束时间
     */
    private String finishTime;
    /**
     * 参与者id
     */
    private String joinMember;
    /**
     * 参与者昵称
     */
    private String joinMemberName;
    /**
     * 支付订单号
     */
    private String orderId;
    /**
     * 采购价格(实付金额)
     */
    private BigDecimal purchasePrice = BigDecimal.ZERO;
    /**
     * 玫丽专享价
     */
    private BigDecimal discountPrice = BigDecimal.ZERO;
    /**
     * 消费者分享报酬
     */
    private BigDecimal consumerShareReward = BigDecimal.ZERO;
    /**
     * 销售报酬（线上服务商分销报酬）
     */
    private BigDecimal foremanReward = BigDecimal.ZERO;
    /**
     * 商品id
     */
    @NotBlank
    private String goodsId;
    /**
     * 商品名称
     */
    private String goodsName;
    /**
     * 商品编号
     */
    private String goodsNo;
    /**
     * 商品图
     */
    private String goodsImages;
    /**
     * 商品标签
     */
    private String goodsTag;
    /**
     * 商品规格
     */
    private String specification;

    /**
     * 领取人数
     */
    private Integer receiveQuota;

    /**
     * 开启反馈。0:不开启；1:开启；
     */
    private String enableFeedback;

    /**
     * 是否需要填写试用报告。0:不开启；1:开启。默认1
     */
    private String enableReport;

    /**
     * 是否需要上传试用素材。0:不开启；1:开启。默认1
     */
    private String enableMaterial;

    /**
     * 是否需要上传社交平台截图凭证。0:不开启；1:开启。默认1
     */
    private String enableSocial;

    /**
     * 试用要求
     */
    private String requiredContent;

    /**
     * A级报酬
     */
    private Double levelAReward;

    /**
     * B级报酬
     */
    private Double levelBReward;

    /**
     * C级报酬
     */
    private Double levelCReward;

    /**
     * 评级标准
     */
    private String ratingCriteria;

    /**
     * A级优惠券金额
     */
    private BigDecimal levelACouponAmount = BigDecimal.ZERO;

    /**
     * B级优惠券金额
     */
    private BigDecimal levelBCouponAmount = BigDecimal.ZERO;

    /**
     * C级优惠券金额
     */
    private BigDecimal levelCCouponAmount = BigDecimal.ZERO;

    /**
     * A级优惠券适用范围。0此商品；1全部商品
     */
    private String levelACouponRange;

    /**
     * B级优惠券适用范围。0此商品；1全部商品
     */
    private String levelBCouponRange;

    /**
     * C级优惠券适用范围。0此商品；1全部商品
     */
    private String levelCCouponRange;

    /**
     * 是否公开活动。0否；1是
     */
    private String open;

    /**
     * 标题标签
     */
    private String label;

    /**
     * 优惠券总额
     */
    @TableField(exist = false)
    private BigDecimal totalCouponAmount;

    public BigDecimal getTotalCouponAmount() {
        return this.levelACouponAmount.add(this.levelBCouponAmount).add(this.levelCCouponAmount).setScale(2, RoundingMode.HALF_UP);
    }

    public String checkParams() {
        if (samplePrice.compareTo(BigDecimal.ZERO) < 0) {
            return "样品价格不能小于0";
        }
        if (purchasePrice.compareTo(BigDecimal.ZERO) < 0) {
            return "采购价格不能小于0";
        }
        if (discountPrice.compareTo(BigDecimal.ZERO) < 0) {
            return "玫丽专享价不能小于0";
        }
        if (consumerShareReward.compareTo(BigDecimal.ZERO) < 0) {
            return "消费者分享报酬不能小于0";
        }
        if (foremanReward.compareTo(BigDecimal.ZERO) < 0) {
            return "销售报酬不能小于0";
        }
        if (remainQuota > sampleQuota){
            return "样品剩余数量不能大于总数";
        }
        return "";
    }
}
